home *** CD-ROM | disk | FTP | other *** search
- {A program to convert an EXE file to a BIN file}
- {Note that the EXE file must be smaller than 64K for this to work}
- {MAKEBIN V1.01 Copyright 1989 Michael Day as of 16 April 1989}
- {all rights reserved}
- program MakeBIN;
- uses dos;
- const MaxSize = 4096;
- var fw,fr:file;
- temp:array[0..MaxSize] of byte;
- frSize,fwSize:longint;
- i,memadd,result:word;
- f1,f2:string;
-
- {-conversion header-}
- const hdr : array[0..1023] of byte =
- ($2E,$8C,$1E,$A9,$02,$0E,$1F,$8C,$16,$B1,$02,$89,$26,$AF,$02,$89,
- $2E,$AD,$02,$8C,$06,$AB,$02,$89,$3E,$A7,$02,$89,$36,$A5,$02,$89,
- $16,$A3,$02,$89,$0E,$A1,$02,$89,$1E,$9F,$02,$A3,$9D,$02,$9C,$58,
- $A3,$9B,$02,$A1,$97,$02,$0B,$C0,$74,$03,$E9,$77,$00,$BE,$00,$04,
-
- $8B,$D6,$B1,$04,$D3,$CA,$81,$E2,$FF,$0F,$8C,$C8,$03,$D0,$03,$54,
- $08,$8B,$4C,$06,$8B,$5C,$18,$03,$DE,$8B,$44,$16,$03,$C2,$A3,$B5,
- $02,$A3,$C3,$02,$8B,$44,$14,$A3,$B3,$02,$A3,$C1,$02,$B8,$42,$49,
- $A3,$97,$02,$B8,$50,$43,$A3,$99,$02,$C4,$3F,$8C,$C0,$03,$C2,$8E,
-
- $C0,$26,$01,$15,$83,$C3,$04,$E2,$F0,$8B,$44,$02,$A3,$CD,$02,$8B,
- $44,$0E,$03,$C2,$A3,$B9,$02,$A3,$C7,$02,$A3,$BF,$02,$8B,$44,$10,
- $A3,$B7,$02,$A3,$C5,$02,$A3,$BD,$02,$83,$EA,$10,$89,$16,$C9,$02,
- $89,$16,$BB,$02,$E8,$A3,$01,$75,$60,$8B,$16,$C9,$02,$8B,$C2,$2D,
-
- $02,$00,$8E,$D8,$33,$DB,$B9,$20,$01,$C6,$07,$00,$43,$E2,$FA,$33,
- $DB,$C7,$07,$97,$02,$8C,$4F,$02,$BB,$10,$00,$C7,$07,$5A,$00,$89,
- $57,$01,$2E,$A1,$CD,$02,$89,$47,$03,$8E,$DA,$B9,$0B,$00,$33,$DB,
- $C6,$47,$5D,$20,$C6,$47,$6D,$20,$43,$E2,$F5,$B4,$62,$CD,$21,$B9,
-
- $15,$00,$33,$F6,$E8,$46,$01,$2E,$A1,$CD,$02,$8C,$C1,$03,$C1,$26,
- $A3,$02,$00,$26,$C6,$06,$80,$00,$1E,$B4,$62,$CD,$21,$2E,$89,$1E,
- $CB,$02,$B9,$45,$00,$BE,$16,$00,$E8,$22,$01,$B4,$50,$2E,$8B,$1E,
- $C9,$02,$CD,$21,$BB,$20,$00,$BF,$CF,$02,$B8,$F7,$01,$E8,$2B,$01,
-
- $BB,$27,$00,$BF,$D7,$02,$B8,$F7,$01,$E8,$1F,$01,$BB,$21,$00,$BF,
- $D3,$02,$B8,$1F,$02,$E8,$13,$01,$0E,$1F,$83,$3E,$B9,$02,$00,$74,
- $0A,$FA,$8E,$16,$B9,$02,$8B,$26,$B7,$02,$FB,$B8,$85,$01,$0E,$50,
- $FF,$36,$B5,$02,$FF,$36,$B3,$02,$8B,$2E,$BD,$02,$8E,$06,$C9,$02,
-
- $8E,$1E,$BB,$02,$CB,$2E,$8C,$1E,$BB,$02,$2E,$8C,$16,$B9,$02,$2E,
- $89,$26,$B7,$02,$2E,$89,$2E,$BD,$02,$2E,$8C,$16,$BF,$02,$BB,$20,
- $00,$BF,$CF,$02,$E8,$DD,$00,$BB,$21,$00,$BF,$D3,$02,$E8,$D4,$00,
- $BB,$27,$00,$BF,$D7,$02,$E8,$CB,$00,$B4,$50,$2E,$8B,$1E,$CB,$02,
-
- $CD,$21,$0E,$1F,$FA,$8E,$16,$B1,$02,$8B,$26,$AF,$02,$FB,$8B,$2E,
- $AD,$02,$8E,$06,$AB,$02,$8B,$3E,$A7,$02,$8B,$36,$A5,$02,$8B,$16,
- $A3,$02,$8B,$0E,$A1,$02,$8B,$1E,$9F,$02,$A1,$9B,$02,$50,$9D,$A1,
- $9D,$02,$8E,$1E,$A9,$02,$CB,$2E,$8C,$1E,$BB,$02,$0E,$1F,$E8,$59,
-
- $00,$75,$87,$A1,$C9,$02,$A3,$BB,$02,$A1,$C7,$02,$A3,$B9,$02,$A1,
- $C5,$02,$A3,$B7,$02,$E9,$7C,$FF,$B8,$08,$00,$33,$DB,$F9,$CF,$82,
- $FC,$00,$74,$D3,$82,$FC,$4C,$74,$CE,$82,$FC,$31,$74,$C9,$82,$FC,
- $48,$74,$E5,$82,$FC,$49,$74,$E0,$82,$FC,$4A,$74,$DB,$82,$FC,$4B,
-
- $74,$D6,$2E,$FF,$36,$D5,$02,$2E,$FF,$36,$D3,$02,$CB,$FC,$8E,$DB,
- $2E,$8E,$06,$C9,$02,$8B,$FE,$F3,$A4,$C3,$A1,$B5,$02,$3B,$06,$C3,
- $02,$75,$07,$A1,$B3,$02,$3B,$06,$C1,$02,$C3,$33,$C9,$8E,$D9,$03,
- $DB,$03,$DB,$C4,$0F,$2E,$89,$0D,$2E,$8C,$45,$02,$FA,$89,$07,$8C,
-
- $4F,$02,$FB,$C3,$33,$C9,$8E,$D9,$03,$DB,$03,$DB,$2E,$C4,$0D,$FA,
- $89,$0F,$8C,$47,$02,$FB,$C3,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00);
-
- begin
- if ParamCount < 1 then
- begin
- writeln('** Error: Insufficent data given **');
- writeln('Format is: MAKEBIN INFILE[.EXE] [OUTFILE.BIN]');
- halt(1);
- end;
- if ParamCount < 2 then
- begin
- f1 := ParamStr(1);
- f2 := ParamStr(1);
- i := 0;
- repeat inc(i) until (i > length(f2)) or (f2[i] = '.');
- f2[0] := char(pred(i));
- end
- else
- begin
- f1 := ParamStr(1);
- f2 := ParamStr(2);
- end;
- i := 0;
- repeat inc(i) until (i > length(f1)) or (f1[i] = '.');
- if i > length(f1) then f1 := f1+'.EXE';
- i := 0;
- repeat inc(i) until (i > length(f2)) or (f2[i] = '.');
- if i > length(f2) then f2 := f2+'.BIN';
-
- writeln('Reading:',f1,' --> Creating:',f2);
- assign(fr,f1);
- reset(fr,1);
- frSize := FileSize(fr);
- if frSize > 64000 then
- begin
- writeln('Error:',f1,' <- File is too big to convert');
- Halt(3);
- end;
- blockread(fr,temp,32,result);
- if (temp[0] <> $4D) and (temp[1] <> $5A) then
- begin
- writeln('Error:',f1,' <- Is not an EXE file');
- halt(4);
- end;
- memadd := word(temp[$0A])+word(temp[$0B] shl 8);
- if (frSize+memadd+15) > 65000 then
- begin
- writeln('Error:',f2,' <- File is too big; reduce the memory allocation');
- writeln('Size was:',fwSize+memadd,' (File was not created)');
- Halt(4);
- end;
- fwSize := (frSize+memadd+15) and $ffff0;
- temp[2] := lo(word(fwSize)); {save the physical size of the file}
- temp[3] := hi(word(fwSize)); {in the header at location 2-3}
- assign(fw,f2);
- rewrite(fw,1);
- blockwrite(fw,hdr,sizeof(hdr),result);
- if result = 0 then
- begin
- writeln('** Error creating file:',f2);
- halt(2);
- end;
- blockwrite(fw,temp,32,result);
- result := MaxSize;
- while result = MaxSize do
- begin
- blockread(fr,temp,MaxSize,result);
- blockwrite(fw,temp,result,result);
- end;
- close(fr);
- fillchar(temp,sizeof(temp),0);
- while memadd > MaxSize do
- begin
- blockwrite(fw,temp,MaxSize,result);
- memadd := memadd - MaxSize;
- end;
- if memadd > 0 then
- blockwrite(fw,temp,memadd,result);
- close(fw);
- writeln('* Done *');
- end.
-